﻿/**
 * \file CivilisationImpl.cs
 * \brief represente une civilisation
 * */
namespace Implementation
{
	using interfaces;
	using System;
	using System.Collections.Generic;
	using System.Linq;
	using System.Text;
    [SerializableAttribute()]
	public class CivilisationImpl : Civilisation
	{
		private bool estEnJeu;

		private List<Ville> villes;

		private List<Unite> unites;

        protected Joueur j;

        public static int COUT_ETUDIANT = 100;

        public static int COUT_ENSEIGNANT = 60;

        public static int COUT_DIRECTEUR = 200;

		public virtual List <Ville> getVilles()
		{
            return villes;
            
		}

        public virtual void addVilles(Ville v)
        {
            villes.Add(v);
           
        }

        public virtual void supprVilles(Ville v)
        {
            villes.Remove(v);
        }

		public virtual List <Unite> getUnites()
		{
            return unites;
		}

        public virtual void addUnite(Unite u)
        {
            unites.Add(u);
        }

        public virtual void supprUnite(Unite u)
        {
            j.getJeu().getCarte().supprUnitPos(u.getX(), u.getY(), u);
            unites.Remove(u);         
        }

		public virtual bool getEstEnJeu()
		{
            return this.estEnJeu;
		}

        /**
        * \fn bool aEnseignant()
        * \ brief retourne le fait que la civilisation a au moins un enseignant
        * \ bool
        */
        public virtual bool aEnseignant()
        {
            foreach (Unite u in unites)
            {
                if (u is Enseignant)
                    return true;
            }
            return false;
        }

        /**
        * \fn bool aDirecteur()
        * \ brief retourne le fait que la civilisation a un directeur
        * \ bool
        */
        public virtual bool aDirecteur()
        {
            foreach (Unite u in unites)
            {
                if (u is Directeur)
                    return true;
            }
            return false;
        }

        /**
        * \fn bool aVille()
        * \ brief retourne le fait que la civilisation a au moins une ville
        * \ bool
        */
        public virtual bool aVille()
        {
            return (villes.Count() > 0);
        }

        public virtual void setJoueur(Joueur jou)
        {
            j = jou;
        }

        public virtual Unite creerEnseignant(int x, int y) {
            return null;
        }

        public virtual Unite creerEtudiant(int x, int y){
            return null;
        }

        public virtual Unite creerDirecteur(int x, int y) {
            return null;
        }

		public CivilisationImpl()
		{
            villes = new List<Ville>();
            unites = new List<Unite>();
            estEnJeu = true;
		}

	}
}

